package com.example.demo.util;

import com.example.demo.entity.Menu;
import com.example.demo.entity.User;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.List;
import java.util.Map;

/**
 * @description：授权通过后的线程变量.
 * @author：lw
 * @since：2023/12/29
 **/

//ThreadLocal是jdk所提供的一个线程工具类，叫做线程变量，意思是ThreadLocal中填充的变量属于当前线程，该变量对其他线程而言是隔离的，也就是说该变量是当前线程独有的变量，使用该工具类可以实现在同一个线程进行数据的共享。
public class AuthContextUtil {
    // 创建一个ThreadLocal对象
    private static final ThreadLocal<IUser> threadLocal = new ThreadLocal<>() ;

    // 定义存储数据的静态方法
    public static void set(IUser user) {
        threadLocal.set(user);
    }

    // 定义获取数据的方法
    public static IUser get() {
        return threadLocal.get() ;
    }

    // 删除数据的方法
    public static void remove() {
        threadLocal.remove();
    }

    @EqualsAndHashCode(callSuper = true)
    @Data
    public static class IUser extends  User {
        private String ip;
        private List<Menu> menu;
        private Map<String,String> nameToMenuMap;
    }
}

